package com.cskaoyan.basic._1identifier;
/**
 * 标识符
 *  问题1：什么是标识符？
 * 上面我们提到过，编程的过程就是变量使用的过程。
 * 在这个使用变量的过程中，毫无疑问是需要知道变量的名字，才能更方便得去使用它。
 * 而在Java代码中，使用 标识符 表示各种各样的名字，也包括变量名。
 *
 *  问题2：标识符有什么用？
 * 上面已经说过了，标识符是一个表示名字的字符串。
 *
 *  问题3：需要标识符起名字的常见结构有哪些？
 * 主要有：
 * 类名（包括后面会学习的接口名、注解名等）
 * 方法名（main就是一个方法名）
 * 变量名
 * 包名
 *
 * 标识符命名规范
 * java程序员的第一步，从写好标识符的命名规范开始
 * 语法要求：
 * 标识符的开头必须是：
 * 字母（A~Z 和 a~z）
 * 下划线（_）
 * 美元符号（$）
 * Unicode 字符集中编号为0xC0以及它后面的所有符号
 * 标识符的命名开头不能以数字开头！
 *
 * 标识符的组成必须是：
 * 数字（0~9）
 * 字母（A~Z 和 a~z）
 * 美元符号（$）
 * 下划线（_）
 * Unicode 字符集中编号为0xC0以及它后面的所有符号
 *
 *
 * 在符合语法的前提下，标识符还有一套约定俗成的命名规则。（重点，重中之重）
 *
 * 在计算机中，起名字是很常见的操作，为了起好名字，驼峰命名法就被发明了。所谓驼峰，指的是当多个单词共同组成一个字符串时，不同单词的大写和小写间隔起来，形成一种像驼峰一样的凹凸，故称之为驼峰命名法。 使用驼峰命名法可以清晰得看到不同单词组成的新字符串。驼峰命名法主要有两种：
 *
 * 小驼峰式命名法
 * 多个单词组合成一个字符串，第一个单词的首字母小写，从第二个单词开始，首字母都要大写。
 * 例如：myName，myFirstJavaProgram，myJava
 * 当然如果就一个单词
 * 那就直接写name，java等。
 *
 * 大驼峰式命名法
 * 多个单词组合成一个字符串
 * 第一个单词的首字母 大写 。
 * 从第二个单词开始，首字母都要大写
 * 例如：MyName，MyFirstJavaProgram，MyJava
 * 当然如果就一个单词
 * 那就直接写Name，Java等。
 *
 *
 * 具体分类别来说：
 * 类名（包括后面会学习的接口名、注解名等）应该使用大驼峰命名法。
 * 变量和方法的命名标识符应该使用小驼峰命名法。
 *
 * 包名的命名：
 * 多数公司开发的包名会以反转公司的域名作为开头。
 * 例如在百度做开发，项目的包名开头应该是com.baidu.xxx
 * 如果是王道，那么开头就是com.cskaoyan
 * 包名的单词字母应该全部小写，禁止使用大写。
 * 多级包名用"."隔开。
 * 一级包名尽量最好只使用一个单词，而且这个单词用单数
 * 比如装工具的工具包，应该叫util而不应该叫utils
 *
 * 除此之外，还有：
 *      1.尽量使用合法规范的英文单词，不要使用中文，拼音或者中英混合，都是错误的。
 *      但是特殊情况除外
 *      比如北京，阿里巴巴，百度等 本身就用拼音
 *
 *      2.下划线和美元符号尽量不要使用。
 *          即便是使用，也严格禁止在开头使用。
 *          更不能单独使用。
 *          Java当中这两个字符在标识符都是非常罕见使用的，尽量不要用。
 *
 *
 *
 * @since 16:53
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {

        String name;
        // 大驼峰书写变量名是错误的
        String Name;

        // int 0abc;
        int a = 0x123;
        // Non-ASCII characters in an com.cskaoyan.basic._1identifier.
        // 言下之意是说：不建议使用非ascii码表中的字符来给标识符起名
        int 长风;

        int Class;

        // #是一个很常见的字符，在ascii码表中存在，他肯定不是Unicode 字符集中编号为0xC0以及它后面的所有符号
        // int DataClass#;

        // 计算机中空格，回车，换行，制表等看起来没有表现的东西，其实都是字符
        // int Hello  World;

        int 好きだ;

        // int _;
        // int $;

    }
}
class MyStudent{}
class My_Student{}